<?php

function nombrePagina() {
    $nombreScript = $_SERVER['SCRIPT_NAME'];
    $nombre_archivo = array_pop(explode('/', $nombreScript));
    return $nombre_archivo;
}

function conectarPDO() {
    try {
//        $gbd = new PDO('mysql:host=serverversal.ddns.net;dbname=sistemaversal_desa', "desarrollo", "desarrollo");
//        $gbd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $gbd = new PDO('mysql:host=localhost;dbname=sistemaversal', "sistemaversal", "83031771"); 
        return $gbd;
    } catch (PDOException $e) {
        return false;
    }
}

function conectar() {
    //$conexion = mysql_connect("serverversal.ddns.net", "desarrollo", "desarrollo");
    $conexion=mysql_connect("localhost","sistemaversal","83031771");
//    mysql_select_db("sistemaversal_desa");
    mysql_select_db("sistemaversal");
    return $conexion;
}

function FormatoFecha($fecha) {
    list($anio, $mes, $dia) = explode("-", $fecha);
    return $dia . "-" . $mes . "-" . $anio;
}

//convierte una fecha formato "d-m-a a" formato sql
function fechaSql($fecha) {

    $fecha = DateTime::createFromFormat('d-m-Y', $fecha);

    //$arrayFecha = split("-", $fecha);
    //$fecha = $arrayFecha[2] . "-" . $arrayFecha[1] . "-" . $arrayFecha[0];
    //$fecha_creada = date_create($fecha);
    //return date_format($fecha_creada,"Y-m-d H:i:s.u");
    return $fecha->format('Y-m-d');
}

/* Suma n dias a una fecha en formato Dia- mes - anio */

function suma_fechas($fecha, $ndias) {

    $fecha = DateTime::createFromFormat('d-m-Y', $fecha);
    $intervalo = 'P' . $ndias . 'D';
    $nuevaFecha = $fecha->add(new DateInterval($intervalo));
//    if (preg_match("/[0-9]{1,2}\/[0-9]{1,2}\/([0-9][0-9]){1,2}/", $fecha)) {
//        list($dia, $mes, $a�o) = split("/", $fecha);
//    }
//    if (preg_match("/[0-9]{1,2}-[0-9]{1,2}-([0-9][0-9]){1,2}/", $fecha)) {
//        list($dia, $mes, $a�o) = split("-", $fecha);
//    }
//    $nueva = mktime(0, 0, 0, $mes, $dia, $a�o) + $ndias * 24 * 60 * 60;
//    $nuevafecha = date("d-m-Y", $nueva);

    return $nuevaFecha->format('d-m-Y');
}

/**
 *
 * REDONDEA A DOS DECIMALES
 *
 */
function redondearDosDecimal($valor) {

    $float_redondeado = round($valor * 100) / 100;
    return $float_redondeado;
}

/**
 * @description Valida si un email es valido, si el email tiene formato correcto devuelve true caso contrario false. para versiones de php 5.2 +
 * @param String $email cadena que contiene el correo que se desea validar
 * @return true or false
 */
function validaEmail($email) {
    return filter_var($email, FILTER_VALIDATE_EMAIL);
}

/**
 * @description valida que lo que se ingresa sea numerico
 * @param String $string cadena que desea validar
 * @return true si la cadena cotinene solo numeros sino retorna false
 */
function validaDigito($string) {
    return ctype_digit($string);
}

/**
 * descripci�n: valida una cadena de caracteres pasada como argumento, permite 
 * personalizar la validaci�n pudi�ndose aumentar o disminuir la 
 * restricci�n de caracteres.
 * 
 * autor: cass
 * sitio: cassianinet.blogspot.com
 * last update: 11/04/2011 
 *
 * par�metro uno (obligatorio): cadena de caracteres a validar.
 * par�metro dos (opcional): atajos de las restricciones separados por punto y coma (;), 
 *  pueden ser:
 *  esp --> espacios
 *  ace --> acentos
 *  dia --> di�resis
 *  ene --> e�es
 *  gui --> guiones
 *  pun --> puntos
 *  num --> n�meros
 *  und --> underscores
 *  apo --> apostrofes
 * par�metro tres (opcional): controla la visualizaci�n de errores (true o false).
 */
function validaAlfanumerico($sCadena, $restriccion = 'esp', $MostrarError = true) {
    if (empty($sCadena)) {
        if ($MostrarError) {
            die('Error: el primer parametro de ctype_alnum_plus es obligatorio.');
        } else {
            return false;
        }
    }
    if (strlen($restriccion) > 3 and strpos($restriccion, ';') === false) {
        if ($MostrarError) {
            die('Error: El segundo par�metro de ctype_alnum_plus solo acepta los valores 
             (esp,ace,dia,ene,gui,pun,num,und,apo) separados por punto y coma (;)');
        } else {
            return false;
        }
    }

    $sExpr = array('esp' => '\s', 'ace' => '����������', 'dia' => '����������', 'ene' => '��',
        'pun' => '\.', 'gui' => '\-', 'num' => '\d', 'und' => '_', 'apo' => '\'');
    $sPatron = '/^[a-z';
    $restriccion = strtolower($restriccion);

    if ($restriccion == 'esp') {
        $sPatron .= $sExpr['esp'];
    } else {
        $arrRestriccion = explode(';', $restriccion);

        foreach ($arrRestriccion as $name) {
            $sAtajos = array('esp', 'ace', 'dia', 'ene', 'gui', 'pun', 'num', 'und', 'apo');
            if (!in_array($name, $sAtajos)) {
                if ($MostrarError) {
                    die('Error: El segundo par�metro de ctype_alnum_plus solo acepta los valores 
               (esp,ace,dia,ene,gui,pun,num,und,apo) separados por punto y coma (;)');
                } else {
                    return false;
                }
            }

            $sPatron .= $sExpr[$name];
        }
    }

    $sPatron .= ']+$/i';

    return preg_match($sPatron, $sCadena) ? true : false;
}

/**
 * @description comprueba que una cadena no tenga caracteres extra�os
 * @param String $str cadena que se desea limpiar
 * @return String con caracteres eliminados que supere el ASCII 127 o false si no filtro
 */
function limpiaString($str) {
    return filter_var($str, FILTER_SANITIZE_STRIPPED, FILTER_FLAG_STRIP_HIGH);
}

/**
 * @description funcion que limpia un string para ser insertado en base de datos de manera segura  evitando sqlinjection
 * @param String $str cadena que se desea limpiar
 * @return String cadena limpia
 */
function limpiaSql($str) {
    return is_array($str) ? array_map('_clean', $str) : str_replace('\\', '\\\\', htmlspecialchars((get_magic_quotes_gpc() ? stripslashes($str) : $str), ENT_QUOTES));
}

// valida_rut($r) v0.001
// No importa si el RUT esta con punto (.), comas (,),
// guion (-),k (minuscula | mayuscula) da igual.
// ----------------------------------------------------
// Autor: Juan Pablo Aqueveque <jp [arroba] juque [punto] cl >
// Script completamente gratis, eso si! m�ndame un email si lo ocupas
// o si encuentras alg�n problema :-)
//
// Temuco, 31 octubre 2002 11:48:00
function valida_rut($r) {

    $r = strtoupper(ereg_replace('\.|,|-', '', $r));
    $sub_rut = substr($r, 0, strlen($r) - 1);
    $sub_dv = substr($r, -1);
    $x = 2;
    $s = 0;
    for ($i = strlen($sub_rut) - 1; $i >= 0; $i--) {
        if ($x > 7) {
            $x = 2;
        }
        $s += $sub_rut[$i] * $x;
        $x++;
    }
    $dv = 11 - ($s % 11);
    if ($dv == 10) {
        $dv = 'K';
    }
    if ($dv == 11) {
        $dv = '0';
    }
    if ($dv == $sub_dv) {
        return true;
    } else {
        return false;
    }
}

/* * *
 *
 * VALIDA FECHA EN FORMATO DIA-MES-A�O
 * @param String $fecha
 * @return bool True si la fecha es correcta False si la fecha no es correcta
 *
 */

function validaFecha($fecha) {
    list($dia, $mes, $ano) = explode("-", $fecha);
    return checkdate($mes, $dia, $ano);
}

//Valida numero entero
function _is_int($str) {
    return (string) $str === (string) (int) $str;
}

//diferencia de dias entre dos fechas formato SQL
function dias_diferencia($inicio, $final) {
    $desde = strtotime($inicio . " 00:00:00");
    $hasta = strtotime($final . " 24:00:00");
    return round(($hasta - $desde) / 60 / 60 / 24);
}

function obtener_anios_ventas() {
    $sql = "SELECT DISTINCT(YEAR(fecha_ingreso)) as year FROM factura ORDER BY year";
    $consulta = mysql_query($sql)or die("error");
    $nfilas = mysql_num_rows($consulta);
    if ($nfilas > 0) {
        while ($fila = mysql_fetch_array($consulta)) {
            $anios[] = $fila['year'];
        }
    }

    return $anios;
}

?>
